﻿using System;
using System.Threading;

namespace _047_等待线程信号AutoResetEvent
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread 线程1 = new Thread(() =>
              {
                  Console.WriteLine("正在进行第一阶段。。。。");
                  Thread.Sleep(2000);
                  Console.WriteLine("第一阶段处理完成！");
                //发送信号
                中止1.Set();
              });

            Thread 线程2 = new Thread(() =>
              {
                //等第一阶段完成
                中止1.WaitOne();
                  Console.WriteLine("正在进行第二阶段……");
                  Thread.Sleep(2000);
                  Console.WriteLine("第二阶段处理完成");
                //发出信号
                中止2.Set();
              });

            Thread 线程3 = new Thread(() =>
              {
                //等待第二阶段完成
                中止2.WaitOne();
                  Console.WriteLine("正在进行第三阶段……");
                  Thread.Sleep(3000);
                  Console.WriteLine("第三阶段处理完成！");
                //发送信号
                中止3.Set();
              });

            线程1.Start();
            线程2.Start();
            线程3.Start();

            中止3.WaitOne();
            Console.WriteLine("\n所有任务完成");


        }

        static AutoResetEvent 中止1 = new AutoResetEvent(false);
        static AutoResetEvent 中止2 = new AutoResetEvent(false);
        static AutoResetEvent 中止3 = new AutoResetEvent(false);
    }
}
